package com.jl15988.chainlog.example;

import com.jl15988.chainlog.callback.ChainApiCallback;
import com.jl15988.chainlog.model.ChainApiLog;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 自定义接口监控回调实现示例
 */
@Component
public class CustomChainApiCallback implements ChainApiCallback {

    @Override
    public void onChainComplete(ChainApiLog chainApiLog, HttpServletRequest request, HttpServletResponse response) {
        // 自定义处理逻辑
        System.out.println("=== 自定义接口监控 ===");
        System.out.println("接口ID: " + chainApiLog.getId());
        System.out.println("接口方法: " + chainApiLog.getMethod());
        System.out.println("请求URL: " + chainApiLog.getUrl());
        System.out.println("响应时长: " + chainApiLog.getDuration() + "ms");
        System.out.println("客户端IP: " + chainApiLog.getClientIp());

        // 可以在这里实现：
        // 1. 保存监控数据到数据库
        // 2. 发送监控数据到消息队列
        // 3. 推送监控数据到监控系统
        // 4. 生成监控报告
        // 5. 触发告警等

        // 示例：保存到数据库（伪代码）
        // monitorDataService.save(chainApiLog);

        // 示例：发送到消息队列（伪代码）
        // messageProducer.send("monitor.topic", chainApiLog);

        // 示例：慢接口告警（伪代码）
        if (chainApiLog.getDuration() > 1000) {
            System.out.println("⚠️ 慢接口告警: " + chainApiLog.getMethod() + " 耗时 " + chainApiLog.getDuration() + "ms");
            // alertService.sendSlowApiAlert(monitorInfo);
        }

        System.out.println("========================");
    }

    @Override
    public void onChainException(ChainApiLog chainApiLog, HttpServletRequest request,
                                 HttpServletResponse response, Throwable exception) {
        // 异常处理逻辑
        System.out.println("=== 接口监控异常 ===");
        System.out.println("接口ID: " + chainApiLog.getId());
        System.out.println("接口方法: " + chainApiLog.getMethod());
        System.out.println("异常信息: " + exception.getMessage());

        // 可以在这里实现：
        // 1. 记录异常日志
        // 2. 发送异常告警
        // 3. 统计异常次数
        // 4. 触发熔断机制等

        // 示例：发送异常告警（伪代码）
        // alertService.sendExceptionAlert(monitorInfo, exception);

        System.out.println("==================");
    }
}